package org.opencms.free.balance;

import java.io.IOException;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;

import org.opencms.widgets.CmsInputWidget;
import org.opencms.workplace.CmsWidgetDialog;
import org.opencms.workplace.CmsWidgetDialogParameter;
import org.opencms.workplace.CmsWorkplaceSettings;

/**
 * Clase que representa el formulario de alta de un nodo.
 */
public class BalanceFreeNodeNew extends CmsWidgetDialog {

	/**
	 * Atributo que representa el prefijo del formulario.
	 */
	private static final String KEY_PREFIX = "nodemanagement";

	/**
	 * Atributo que representa las páginas que conformarán el formulario de alta
	 * de un nodo.
	 */
	private static final String[] PAGE_ARRAY = { "node_info" };

	/**
	 * Atributo que contiene las páginas que conformarán el formulario de alta
	 * de un nodo.
	 */
	private static final List PAGE_LIST = Arrays.asList(PAGE_ARRAY);

	/**
	 * Objeto de la clase BalanceFreeNode, es necesario para mapear los valores del
	 * nodo a crear con los campos del formulario.
	 */
	private BalanceFreeNode node;

	/**
	 * Atributo que contendrá un texto de información.
	 */
	private String infoText;

	/**
	 * Constructor de la clase.
	 */
	public BalanceFreeNodeNew(final PageContext context, final HttpServletRequest req,
			final HttpServletResponse res) {
		super(context, req, res);
		this.node = new BalanceFreeNode();
	}

	/**
	 * Método observador del atributo infoText.
	 */
	public String getInfoText() {
		return this.infoText;
	}

	/**
	 * Método modificador del atributo infoText.
	 */
	public void setInfoText(final String infoText) {
		this.infoText = infoText;
	}

	/**
	 * Método que realiza las acciones necesarias para dar de alta una nueva
	 * persona.
	 */
	public void actionCommit() throws IOException, ServletException {
		BalanceFreeNodeDao nodeDao = new BalanceFreeNodeDaoImpl();
		Object o = getSettings().getDialogObject();
		Object n = ((Hashtable) o).get(this.getClass().getName());
		this.node = (BalanceFreeNode) n;
		// No existen errores, hacemos el insert
		nodeDao.saveNode(this.node);
		this.node = null;
	}

	/**
	 * Método que inicializa el workplace con los datos del formulario.
	 */
	protected void initWorkplaceRequestValues(
			final CmsWorkplaceSettings settings,
			final HttpServletRequest request) {
		setKeyPrefix(KEY_PREFIX);
		super.initWorkplaceRequestValues(settings, request);
		setDialogObject(node);
	}

	/**
	 * Método que define los widgets que conformarán el formulario.
	 */
	protected void defineWidgets() {
		this.node = new BalanceFreeNode();
		addWidget(new CmsWidgetDialogParameter(this.node, "nodeName",
				PAGE_ARRAY[0], new CmsInputWidget()));
		addWidget(new CmsWidgetDialogParameter(this.node, "nodeUrl",
				PAGE_ARRAY[0], new CmsInputWidget()));
	}

	/**
	 * Método que inicializa el objeto de gestión de mensajes.
	 */
	protected void initMessages() {
		addMessages(Messages.get().getBundleName());
		super.initMessages();
	}

	/**
	 * Método observador del atributo PAGE_ARRAY.
	 */
	protected String[] getPageArray() {
		return PAGE_ARRAY;
	}
}